package lv.clientedisqueria.view.grupo;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.Observer;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import lv.clientedisqueria.controller.Controller;
import lv.clientedisqueria.model.grupo.GrupoModel;
import lv.clientedisqueria.view.AbstractPanel;
import lv.mensajeriadisqueria.idomain.IGrupo;


@SuppressWarnings("serial")
public class GrupoPanel extends AbstractPanel<IGrupo> implements Observer{

	private final Controller<IGrupo> grupoController;
	
	private JTextField nombreTF;
	private JLabel nombreLbl;
	private JPanel textFieldsPanel;
	private JScrollPane scrollPane;
	private JTable grupoTabla;
	
	public GrupoPanel(final GrupoModel grupoModel){
		super(grupoModel);
		grupoController=new Controller<IGrupo>(grupoModel);
		grupoController.addObserver(this);
		iniciarVista();
	}
	
	private void iniciarVista() {
		setLayout(new BorderLayout());
		add(new GrupoMenuBoton(grupoController), BorderLayout.NORTH);
		
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(getTextFieldsPanel(), BorderLayout.NORTH);
		
		panel.add(getScrollPane(), BorderLayout.CENTER);
		add(panel, BorderLayout.CENTER);
	}

	public JScrollPane getScrollPane() {
		if(scrollPane == null) {
			scrollPane = new JScrollPane(getTabla());
			scrollPane.setAutoscrolls(true);
		}
		return scrollPane;
	}
	
	public JTable getTabla() {
		if(grupoTabla == null) {
			grupoTabla = new JTable(grupoController.getModelo().getTablaModel());
			grupoTabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			grupoTabla.setSelectionModel(grupoController.getModelo().getTablaModel().getListSelectionModel());
		}
		return grupoTabla;
	}
	
	public Controller<IGrupo> getGrupoController() {
		return grupoController;
	}

	public JTextField getNombreTF() {
		if(nombreTF == null) {
			nombreTF = new JTextField();
			nombreTF.setEnabled(false);
		}
		return nombreTF;
	}

	public JLabel getNombreLbl() {
		if(nombreLbl == null) {
			nombreLbl = new JLabel("Nombre");
		}
		return nombreLbl;
	}

	public JPanel getTextFieldsPanel() {
		if(textFieldsPanel == null){
			textFieldsPanel = new JPanel(new GridLayout(1, 1));
			textFieldsPanel.add(getNombreLbl());
			textFieldsPanel.add(getNombreTF());
			textFieldsPanel.validate();
			
			IGrupo grupo = grupoController.getModelo()
					.getTablaModel().getSeleccionado();
			
			if(grupo!= null){
				actualizarCampos(grupo);
			}
			
			
		}
		return textFieldsPanel;
	}

	@Override
	protected void actualizarCampos(IGrupo grupo) {
		getNombreTF().setText(grupo.getNombre());
		GrupoPanel.this.repaint();
	}

	@Override
	protected IGrupo actualizarDomain(IGrupo grupo) {
		grupo.setNombre(getNombreTF().getText());
		return grupo;
	}

	@Override
	protected void actualizarTabla() {
		grupoTabla.updateUI();		
	}

	@Override
	protected Controller<IGrupo> getController() {
		return this.grupoController;
	}

	@Override
	protected void iniciarCampos() {
		nombreTF.setText("");		
	}

	@Override
	protected void habilitarTextField(boolean habilitar) {
		nombreTF.setEnabled(habilitar);
	}
}

